package com.liuyjy.base.common.util;

import cn.hutool.core.util.RandomUtil;
import org.apache.commons.lang3.StringUtils;

import java.time.LocalDateTime;
import java.util.Random;
import java.util.UUID;

/**
 * @Author liuyjy
 * @Date 2020/7/22 11:21
 * @Description: no生成工具类
 **/
public class CodeUtil {

    private static final String[] STORE_INVITATION_CHARS = {"a", "b", "c", "d", "e", "f",
            "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
            "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
            "6", "7", "8", "9"};


    public static void main(String[] args) {

        System.out.println(numToLetter(44444));

        System.out.println(getRandom());


        String replace = UUID.randomUUID().toString().replace("-", "");
        System.out.println(replace);
        System.out.println(getRandomNumCode(6));

        System.out.println(getRandomStrCode());

        System.out.println(getOrderNo("ddd"));
    }

    /**
     * 获取随机字符串 4位
     *
     * @return String
     */
    public static String getRandomStrCode() {
        return getRandomStrCode(4);
    }

    /**
     * 获取随机字符串
     *
     * @param len 长度
     * @return String
     */
    public static String getRandomStrCode(int len) {
        return RandomUtil.randomString(len).toUpperCase();
    }

    /**
     * 获取随机字符串 8位
     *
     * @param type 类型
     * @return String
     */
    public static String getRandomStrCode(String type) {
        return type + getRandomStrCode(type, 8);
    }

    /**
     * 获取随机字符串
     * @param type  类型
     * @param len 长度
     * @return String
     */
    public static String getRandomStrCode(String type, int len) {
        if (StringUtils.isEmpty(type)) {
            return getRandomStrCode(len);
        }
        int length = len - type.length();
        if (length < 0) {
            return type;
        }
        return type + getRandomStrCode(length);
    }


    /**
     * 获取随机字符串 4位
     *
     * @return String
     */
    public static String getRandomNumCode() {
        return getRandomNumCode(4);
    }

    /**
     * 获取随机字符串
     *
     * @param len 长度
     * @return String
     */
    public static String getRandomNumCode(int len) {
        return RandomUtil.randomNumbers(len).toUpperCase();
    }

    /**
     * 获取UUID
     *
     * @return String
     */
    public static String getUUID() {
        return UUID.randomUUID().toString().replace("-", "");
    }

    /**
     * 数字转字母 4位
     *
     * @param num num
     * @return String
     */
    public static String numToLetter(int num) {
        return numToLetter(num, 4);
    }

    /**
     * 数字转字母
     *
     * @param num num
     * @param len 长度
     * @return String
     */
    public static String numToLetter(int num, int len) {
        String numStr = num + "";
        if (numStr.length() < len) {
            //补零
            numStr = zeroFormat(num, len, true);
        }
        //转字母
        return numToLetter(numStr);
    }

    /**
     * 生成订单编号
     *
     * @return String
     */
    public static String getOrderNo() {
        return getOrderNo(null);
    }

    /**
     * 生成订单编号
     *
     * @param type 类型
     * @return String
     */
    public static String getOrderNo(String type) {
        String nowTime = DateUtil.dateFormat(LocalDateTime.now(), "yyMMddHHmmssSSS");
        if (StringUtils.isEmpty(type)) {
            return nowTime;
        }
        return type + nowTime + RandomUtil.randomNumbers(4);
    }

    /**
     * 手机号转换*
     *
     * @param phone
     * @return
     */
    public static String phoneToStr(String phone) {
        if (StringUtils.isEmpty(phone)) {
            return "";
        }
        return phone.substring(0, 3) + "****" + phone.substring(7, phone.length());
    }


    /**
     * 数字不足位数前后补0
     *
     * @param num  参与补零的数字
     * @param len  最终位数长度
     * @param prev 前或后，true前，false后
     * @return String
     */
    public static String zeroFormat(Integer num, int len, boolean prev) {
        int l = num.toString().length();
        StringBuilder sb = new StringBuilder();
        if (!prev) {
            //后补
            sb.append(num);
        }
        for (int i = 0; i < len - l; i++) {
            sb.append("0");
        }
        if (prev) {
            //前补
            sb.append(num);
        }
        return sb.toString();
    }


    /**
     * 获取随机数 6位
     *
     * @return int
     */
    public static int getRandom() {
        Random random = new Random();
        return random.nextInt(999999 - 100000) + 100000;
    }

    /**
     * 将数字转换成字母
     *
     * @param input 输入数字
     * @return String
     */
    private static String numToLetter(String input) {
        StringBuilder stringBuffer = new StringBuilder();
        for (byte b : input.getBytes()) {
            stringBuffer.append((char) (b + 49));
        }
        return stringBuffer.toString().toUpperCase();
    }

}
